package com.hr.leetcode.哈希表;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author 周恒哲
 * @date 2020/05/15
 **/
public class _18_四数之和 {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        List<List<Integer>> res = getList();
        Arrays.sort(nums);
        for (int i = 0; i < nums.length - 2; i++) {
            if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) {
                int j = i + 1;
                int z = nums.length - 1;
                int sum = 0 - nums[i];
                while (j < z) {
                    if (nums[j] + nums[z] == sum) {
                        res.add(Arrays.asList(nums[i], nums[j], nums[z]));
                        while (j < z && nums[j] == nums[j + 1]) {
                            j++;
                        }
                        while (j < z && nums[z] == nums[z - 1]) {
                            z--;
                        }
                        j++;
                        z--;
                    } else if (nums[j] + nums[z] > sum) {
                        while (j < z && nums[z] == nums[z - 1]) {
                            z--;
                        }
                        z--;
                    } else {
                        while (j < z && nums[j] == nums[j + 1]) {
                            j++;
                        }
                        j++;
                    }
                }
            }
        }
        return res;
    }

    private ArrayList<List<Integer>> getList() {
        return new ArrayList<>();
    }
}
